package reflect01;

import org.junit.Test;

import java.lang.reflect.Constructor;

/**
 * 反射的第一步获取字节码对象,因为只有获取到字节码对象,才能进一步获取类中的信息
 * 三种方式:
 *   1.类名.class 代表一个字节码对象
 *   2.通过Class类的方法,所有的字节码对象都是Class类的实例
 *     static Class<?> forName(String className)
 *           返回与带有给定字符串名的类或接口相关联的 Class 对象。
 *   3.通过Object类中的getClass()方法获取该类的字节码对象
 *      Class<?> getClass()
 *           返回此 Object 的运行时类。
 *   无论采用哪种方式获取该类的字节码对象,都是获取的同一个字节码对象
 */
public class ReflectDemo01 {
	@Test
	public void testMethod01() {
		System.out.println(Person.class);//class reflect01.Person
	}

	@Test
	public void testMethod02() throws ClassNotFoundException {
		/*Class p = Class.forName("Person");
		System.out.println(p);*/
		Class p = Class.forName("reflect01.Person");
		System.out.println(p);
	}

	@Test
	public void testMethod03() {
		Person p = new Person();
		System.out.println(p.getClass());
	}

	@Test
	public void testMethod04() throws ClassNotFoundException {
		Class p1 = Person.class;
		Class p2 = Class.forName("reflect01.Person");
		Class p3  = new Person().getClass();
		System.out.println(p1==p2);//true
		System.out.println(p1==p3);//true
		System.out.println(p2==p3);//true
	}
}
